home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 2002 #11 / Amiga Plus CD - 2002 - No. 11.iso / Tools / Development / ncurses-5.3 / ncurses / tinfo / lib_options.c < prev    next >
Encoding:
C/C++ Source or Header  |  2002-10-27  |  6.4 KB  |  258 lines

  1. /****************************************************************************
  2.  * Copyright (c) 1998,1999,2000,2001,2002 Free Software Foundation, Inc.    *
  3.  *                                                                          *
  4.  * Permission is hereby granted, free of charge, to any person obtaining a  *
  5.  * copy of this software and associated documentation files (the            *
  6.  * "Software"), to deal in the Software without restriction, including      *
  7.  * without limitation the rights to use, copy, modify, merge, publish,      *
  8.  * distribute, distribute with modifications, sublicense, and/or sell       *
  9.  * copies of the Software, and to permit persons to whom the Software is    *
  10.  * furnished to do so, subject to the following conditions:                 *
  11.  *                                                                          *
  12.  * The above copyright notice and this permission notice shall be included  *
  13.  * in all copies or substantial portions of the Software.                   *
  14.  *                                                                          *
  15.  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  *
  16.  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               *
  17.  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   *
  18.  * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   *
  19.  * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    *
  20.  * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    *
  21.  * THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               *
  22.  *                                                                          *
  23.  * Except as contained in this notice, the name(s) of the above copyright   *
  24.  * holders shall not be used in advertising or otherwise to promote the     *
  25.  * sale, use or other dealings in this Software without prior written       *
  26.  * authorization.                                                           *
  27.  ****************************************************************************/
  28.  
  29. /****************************************************************************
  30.  *  Author: Zeyd M. Ben-Halim <zmbenhal@netcom.com> 1992,1995               *
  31.  *     and: Eric S. Raymond <esr@snark.thyrsus.com>                         *
  32.  ****************************************************************************/
  33.  
  34. /*
  35. **    lib_options.c
  36. **
  37. **    The routines to handle option setting.
  38. **
  39. */
  40.  
  41. #include <curses.priv.h>
  42.  
  43. #include <term.h>
  44.  
  45. MODULE_ID("$Id: lib_options.c,v 1.46 2002/02/02 19:40:54 tom Exp $")
  46.  
  47. NCURSES_EXPORT(int)
  48. idlok(WINDOW *win, bool flag)
  49. {
  50.     T((T_CALLED("idlok(%p,%d)"), win, flag));
  51.  
  52.     if (win) {
  53.     _nc_idlok = win->_idlok = (flag && (has_il() || change_scroll_region));
  54.     returnCode(OK);
  55.     } else
  56.     returnCode(ERR);
  57. }
  58.  
  59. NCURSES_EXPORT(void)
  60. idcok(WINDOW *win, bool flag)
  61. {
  62.     T((T_CALLED("idcok(%p,%d)"), win, flag));
  63.  
  64.     if (win)
  65.     _nc_idcok = win->_idcok = (flag && has_ic());
  66.  
  67.     returnVoid;
  68. }
  69.  
  70. NCURSES_EXPORT(int)
  71. halfdelay(int t)
  72. {
  73.     T((T_CALLED("halfdelay(%d)"), t));
  74.  
  75.     if (t < 1 || t > 255)
  76.     returnCode(ERR);
  77.  
  78.     cbreak();
  79.     SP->_cbreak = t + 1;
  80.     returnCode(OK);
  81. }
  82.  
  83. NCURSES_EXPORT(int)
  84. nodelay(WINDOW *win, bool flag)
  85. {
  86.     T((T_CALLED("nodelay(%p,%d)"), win, flag));
  87.  
  88.     if (win) {
  89.     if (flag == TRUE)
  90.         win->_delay = 0;
  91.     else
  92.         win->_delay = -1;
  93.     returnCode(OK);
  94.     } else
  95.     returnCode(ERR);
  96. }
  97.  
  98. NCURSES_EXPORT(int)
  99. notimeout(WINDOW *win, bool f)
  100. {
  101.     T((T_CALLED("notimout(%p,%d)"), win, f));
  102.  
  103.     if (win) {
  104.     win->_notimeout = f;
  105.     returnCode(OK);
  106.     } else
  107.     returnCode(ERR);
  108. }
  109.  
  110. NCURSES_EXPORT(void)
  111. wtimeout(WINDOW *win, int delay)
  112. {
  113.     T((T_CALLED("wtimeout(%p,%d)"), win, delay));
  114.  
  115.     if (win) {
  116.     win->_delay = delay;
  117.     }
  118.     returnVoid;
  119. }
  120.  
  121. NCURSES_EXPORT(int)
  122. keypad(WINDOW *win, bool flag)
  123. {
  124.     T((T_CALLED("keypad(%p,%d)"), win, flag));
  125.  
  126.     if (win) {
  127.     win->_use_keypad = flag;
  128.     returnCode(_nc_keypad(flag));
  129.     } else
  130.     returnCode(ERR);
  131. }
  132.  
  133. NCURSES_EXPORT(int)
  134. meta(WINDOW *win GCC_UNUSED, bool flag)
  135. {
  136.     /* Ok, we stay relaxed and don't signal an error if win is NULL */
  137.     T((T_CALLED("meta(%p,%d)"), win, flag));
  138.  
  139.     SP->_use_meta = flag;
  140.  
  141.     if (flag && meta_on) {
  142.     TPUTS_TRACE("meta_on");
  143.     putp(meta_on);
  144.     } else if (!flag && meta_off) {
  145.     TPUTS_TRACE("meta_off");
  146.     putp(meta_off);
  147.     }
  148.     returnCode(OK);
  149. }
  150.  
  151. /* curs_set() moved here to narrow the kernel interface */
  152.  
  153. NCURSES_EXPORT(int)
  154. curs_set(int vis)
  155. {
  156.     int cursor = SP->_cursor;
  157.  
  158.     T((T_CALLED("curs_set(%d)"), vis));
  159.  
  160.     if (vis < 0 || vis > 2)
  161.     returnCode(ERR);
  162.  
  163.     if (vis == cursor)
  164.     returnCode(cursor);
  165.  
  166.     switch (vis) {
  167.     case 2:
  168.     if (cursor_visible) {
  169.         TPUTS_TRACE("cursor_visible");
  170.         putp(cursor_visible);
  171.     } else
  172.         returnCode(ERR);
  173.     break;
  174.     case 1:
  175.     if (cursor_normal) {
  176.         TPUTS_TRACE("cursor_normal");
  177.         putp(cursor_normal);
  178.     } else
  179.         returnCode(ERR);
  180.     break;
  181.     case 0:
  182.     if (cursor_invisible) {
  183.         TPUTS_TRACE("cursor_invisible");
  184.         putp(cursor_invisible);
  185.     } else
  186.         returnCode(ERR);
  187.     break;
  188.     }
  189.     SP->_cursor = vis;
  190.     _nc_flush();
  191.  
  192.     returnCode(cursor == -1 ? 1 : cursor);
  193. }
  194.  
  195. NCURSES_EXPORT(int)
  196. typeahead(int fd)
  197. {
  198.     T((T_CALLED("typeahead(%d)"), fd));
  199.     SP->_checkfd = fd;
  200.     returnCode(OK);
  201. }
  202.  
  203. /*
  204. **      has_key()
  205. **
  206. **      Return TRUE if the current terminal has the given key
  207. **
  208. */
  209.  
  210. #if NCURSES_EXT_FUNCS
  211. static int
  212. has_key_internal(int keycode, struct tries *tp)
  213. {
  214.     if (tp == 0)
  215.     return (FALSE);
  216.     else if (tp->value == keycode)
  217.     return (TRUE);
  218.     else
  219.     return (has_key_internal(keycode, tp->child)
  220.         || has_key_internal(keycode, tp->sibling));
  221. }
  222.  
  223. NCURSES_EXPORT(int)
  224. has_key(int keycode)
  225. {
  226.     T((T_CALLED("has_key(%d)"), keycode));
  227.     returnCode(has_key_internal(keycode, SP->_keytry));
  228. }
  229. #endif /* NCURSES_EXT_FUNCS */
  230.  
  231. /* Turn the keypad on/off
  232.  *
  233.  * Note:  we flush the output because changing this mode causes some terminals
  234.  * to emit different escape sequences for cursor and keypad keys.  If we don't
  235.  * flush, then the next wgetch may get the escape sequence that corresponds to
  236.  * the terminal state _before_ switching modes.
  237.  */
  238. NCURSES_EXPORT(int)
  239. _nc_keypad(bool flag)
  240. {
  241.     if (flag && keypad_xmit) {
  242.     TPUTS_TRACE("keypad_xmit");
  243.     putp(keypad_xmit);
  244.     _nc_flush();
  245.     } else if (!flag && keypad_local) {
  246.     TPUTS_TRACE("keypad_local");
  247.     putp(keypad_local);
  248.     _nc_flush();
  249.     }
  250.  
  251.     if (flag && !SP->_tried) {
  252.     _nc_init_keytry();
  253.     SP->_tried = TRUE;
  254.     }
  255.     SP->_keypad_on = flag;
  256.     return (OK);
  257. }
  258.